<?php
/*
 * * * * * * * * * * LICENCIA * * * * * * * * * * * * * * * * * * * * *

Copyright(C) 2012
pensum Universtiario de Tecnología Dr. Federico Rivero Palacio

Este programa es Software Libre y usted puede redistribuirlo y/o modificarlo
bajo los términos de la versión 3.0 de la Licencia Pública General (GPLv3)
publicada por la Free Software Foundation (FSF), es distribuido sin ninguna
garantía. Usted debe haber recibido una copia de la GPLv3 junto con este
programa, sino, puede encontrarlo en la página web de la FSF, 
específicamente en la dirección http://www.gnu.org/licenses/gpl-3.0.html

 * * * * * * * * * * ARCHIVO * * * * * * * * * * * * * * * * * * * * *

Nombre: CursoControlador.php
Diseñador:Geraldine Castillo.
Programador:Geraldine Castillo.
Fecha:03-07-2014 
Descripción:  
	Este es el controlador del módulo curso, permite manejar las 
	operaciones relacionadas con los cursos (agregar, modificar,
	eliminar, consultar y buscar) además de las relacionadas
	con los estudiantes de los cursos(agregar, modificar,eliminar,
	consultar, buscar),es el intermediario entre la base de datos y la vista. 
	
	


 * * * * * * * * Cambios/Mejoras/Correcciones/Revisiones * * * * * * * *
Diseñador - Programador /   Fecha   / Descripción del cambio
   

 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/

require_once "negocio/Curso.php";
require_once "negocio/CurEstudiante.php";
//Clase que permite la comunicación con la base de datos
require_once  "modelo/CursoServicio.php";

class CursoControlador {
	
	/*Método que permite manejar el requerimiento (o acción) indicado por
	 * el usuario según su petición
	 * resumen de acciones:
	 * -----------------CURSO---------------------------------
	 *  listar: Muestra una lista de cursos.
		mostrar: Muestra toda la información de un sólo curso.
		agregar: permite agregar un curso a la base de datos si la acción
		es agregar, en el caso que sea pre agregar abrirá el formulario de
		agregar un curso.
		modificar: permite modificar un curso a la base de datos si la acción
		es modificar, en el caso que sea pre modificar se enviará un 
		objeto tipo curso el cual se mostrará en el formulario de
		modificar un curso.
		eliminar: permite eliminar un curso de la base de datos.
	 * -----------------ESTUDIANTES DEL CURSO------------------
	 *  listarE: Muestra una lista de estudiantes de un curso.
		mostrarE: Muestra toda la información de un sólo estudiante de un curso.
		agregarE: permite agregar un estudiante a un curso a la base de datos si la acción
		es agregar, en el caso que sea pre agregar abrirá el formulario de
		agregar un estudiante a curso.
		modificarE: permite modificar un estudiante de un curso a la base de datos si la acción
		es modificar, en el caso que sea pre modificar se enviará un 
		objeto tipo curso estudiante el cual se mostrará en el formulario de
		modificar un estudiante de un curso.
		eliminarE: permite eliminar un estudiante de un curso de la base de datos.
		
		*Excepciones que lanza:
		Exception: en caso de acción inválida. 
	
	*/
	
	public static function manejarRequerimiento(){
		try {
			//permite obtener la acción a realizar en este módulo
			$accion = PostGet::obtenerPostGet('m_accion');

			
			//Acciones de curso
			if (!$accion) 
				$accion = 'listar';
			
			if ($accion == 'listar') 			self::listar();	
			else if ($accion == 'preAgregar')	self::agregar();
			else if ($accion == 'agregar') 		self::agregar();		
			else if ($accion == 'preModificar') self::modificar();			
			else if ($accion == 'modificar') 	self::modificar();
			else if ($accion == 'mostrar')		self::mostrar();	
			else if ($accion == 'eliminar') 	self::eliminar();
			
			//Aciones de estudiantes del curso
			else if ($accion == 'listarE')		self::listarEstudiantes();
			else if ($accion == 'preAgregarE')	self::agregarEstudiante();							
			else if ($accion == 'agregarE') 	self::agregarEstudiante();		
			else if ($accion == 'preModificarE')self::modificarEstudiante();	
			else if ($accion == 'modificarE') 	self::modificarEstudiante();
			else if ($accion == 'mostrarE')		self::mostrarEstudiante();
			else if ($accion == 'eliminarE')	self::eliminarEstudiante();
			
			//Acciones de los profesores del curso
			elseif ($accion == 'listarCursoDocente') 	self::listarCursosPorDocente();
			else
				throw new Exception ("acción inválida en el controlador del curso: ".$accion);
		}catch (Exception $e){
				throw $e;
		}
	}
	
	
/*función que permite listar los cursos de un periodo académico en específico.
	 obtiene el código del periodo académico de la vista y llama al servicio de curso 
	 a la función obtenerPorPeriodoAcademico(código del periodo académico) y abrirá la vista listar curso
	 correspondiente.
		Parámetros de entrada:
			Ninguno.
		Valores de salida:
			Ninguno.
*/
		static function listar() {
			try{
				$codPeriodo = PostGet::obtenerPostGet('codPeriodo');
			
				$cursos=CursoServicio::obtenerPorPeriodoAcademico(101);
				
				if ($cursos){
					Vista::asignarDato('cursos',$cursos);
					
				}
				else {
					$mensaje="no hay curso en este periodo";
					Vista::asignarDato('mensaje',$mensaje);
						
				}
				Vista::mostrar();
			}catch(Exception $e){
				throw $e;
			}
		
		}
/*función que permite agregar un curso.
	 Obtiene la acción de la vista, si es agregar llamará la función agregar(objeto tipo curso)
	 del servicio de curso y le pasará un objeto tipo curso con la información
	 de la vista, si la acción es preAgregar abrirá la vista de agregar curso.  
		Parámetros de entrada:
			Ninguno.
		Valores de salida:
			Ninguno.
*/
		static function agregar(){
			try{
			
				$accion = PostGet::obtenerPostGet('m_accion');
				if ($accion=='agregar'){
					$curso=new Curso();
/*
					$curso->asignarPeriodo(PostGet::obtenerPostGet('codPeriodo'));
					$curso->asignarCodUniCurricular(PostGet::obtenerPostGet('codUniCurricular'));
					$curso->asignarCodDocente(PostGet::obtenerPostGet('codDocente'));
					$curso->asignarSeccion(PostGet::obtenerPostGet('seccion'));
					$curso->asignarFecInicio(PostGet::obtenerPostGet('fechaInicio'));
					$curso->asignarFecFinal(PostGet::obtenerPostGet('fechaFinal'));
					$curso->asignarCapacidad(PostGet::obtenerPostGet('capacidad'));
					$curso->asignarObservaciones(PostGet::obtenerPostGet('observaciones'));
*/
					
					
					
					
					$curso->asignarPeriodo(101);
					$curso->asignarCodUniCurricular(343);
					$curso->asignarCodDocente(13);
					$curso->asignarSeccion('a');
					$curso->asignarFecInicio('3030-3344-2014');
					$curso->asignarFecFinal('3030-3344-2015');
					$curso->asignarCapacidad(34);
					$curso->asignarObservaciones('no tiene');
					//CursoServicio::agregar($curso);
					
					Vista::asignarDato('curso',$curso);
					
						
				}
				Vista::mostrar();
					
				
			}catch (Exception $e){
				throw $e;
			}
			
		}
/*función que permite modificar un curso.
	 Obtiene la acción de la vista, si es modificar llamará la función modificar(objeto tipo curso)
	 del servicio de curso y le pasará un objeto tipo curso 
	 con la información de la vista, si la acción es preAgregar abrirá la vista de agregar curso.  
		Parámetros de entrada:
			Ninguno.
		Valores de salida:
			Ninguno.
*/
		static function modificar(){
			try{
				$accion =PostGet::obtenerPostGet('m_accion');
				$codigo=PostGet::obtenerPostGet('codigo');
				if ($accion=='modificar'){
					$curso=new Curso();
					$curso->asignarCodigo($codigo);
					$curso->asignarPeriodo(PostGet::obtenerPostGet('codPeriodo'));
					$curso->asignarCodUniCurricular(PostGet::obtenerPostGet('codUniCurricular'));
					$curso->asignarCodDocente(PostGet::obtenerPostGet('codDocente'));
					$curso->asignarSeccion(PostGet::obtenerPostGet('seccion'));
					$curso->asignarFecInicio(PostGet::obtenerPostGet('fechaInicio'));
					$curso->asignarFecFinal(PostGet::obtenerPostGet('fechaFinal'));
					$curso->asignarCapacidad(PostGet::obtenerPostGet('capacidad'));
					$curso->asignarObservaciones(PostGet::obtenerPostGet('observaciones'));
					CursoServicio::modificar($curso);	
				}else if ($accion=='preModificar'){
				
					$curso=CursoServicio::obtener($codigo);
					
					//Vista::mostrar("preModificar",$curso);
				}		
			}catch(Exception $e){
				throw $e;
			}
			
			
		}
/*función que permite mostrar un curso.
	obtiene el código del curso de la vista el cual se le es pasado a la función
	obtener(código del curso) del servicio de curso y llamará a la vista mostrar curso.
		Parámetros de entrada:
			Ninguno.
		Valores de salida:
			Ninguno.
*/
		static function mostrar(){
			try{
				$codigo=PostGet::obtenerPostGet('codigo');
				$curso=CursoServicio::obtener($codigo);
				Vista::asignarDato('curso',$curso);
				//Vista::mostar("mostrar");
				
			}catch(Exception $e){
				throw $e;
				
			}
			
		}
/*función que permite eliminar un curso.
	obtiene el código del curso de la vista el cual se le es pasado a la función
	eliminar(código del curso) del servicio de curso.
		Parámetros de entrada:
			Ninguno.
		Valores de salida:
			Ninguno.
*/

		static function eliminar(){
			try{
				$codigo=PostGet::obtenerPostGet('codigo');
				$curso=CursoServicio::eliminar($codigo);
				//Vista::mostar("eliminado");
				
				
			}catch (Exception $e){
				throw $e;
			}
		}
/*función que permite listar los estudiantes de un curso.
	 obtiene el código del curso de la vista y llama al servicio de curso 
	 a la función obtenerEstudiantes(código del curso) y abrirá la vista listar 
	 estudiantes de un curso.
		Parámetros de entrada:
			Ninguno.
		Valores de salida:
			Ninguno.
*/	
		static function listarEstudiantes(){
			try{

				$codigoCurso=PostGet::obtenerPostGet('codigoCurso');
				
				$r=CursoServicio::obtenerEstudiantes($codigoCurso,false);

				if($r){
					Vista::asignarDato('estudiantes',$r);
				}
				else{
					$mensaje = "No hay estudiantes en ese curso";
					Vista::asignarDato('mensaje',$mensaje);
				}
				Vista::mostrar();
			}catch (Exception $e){
				throw $e;	
			}
		}

/*función que permite agregar un estudiante a un curso.
	 Obtiene la acción de la vista, si es agregarE llamará la función agregarEstudiante(objeto tipo curso estudiante)
	 del servicio de curso y le pasará un objeto tipo curEstudiante con la información
	 de la vista, si la acción es preAgregarE abrirá la vista de agregar estudiante a un curso.  
		Parámetros de entrada:
			Ninguno.
		Valores de salida:
			Ninguno.
*/
		static function agregarEstudiante(){
			try{
				$accion=PostGet::obtenerPostGet('m_accion');
				if ($accion=='agregarE'){
					$curEstudiante=new CurEstudiante();
					$curEstudiante->asignarCodEstudiante(PostGet::obtenerPostGet('codEstudiante'));
					$curEstudiante->asignarCodCurso(PostGet::obtenerPostGet('codCurso'));
					$curEstudiante->asignarPorAsistencia(PostGet::obtenerPostGet('porAsistencia'));
					$curEstudiante->asignarEstado(PostGet::obtenerPostGet('estado'));
					$curEstudiante->asignarObservaciones(PostGet::obtenerPostGet('observaciones'));
					CursoServicio::agregarEstudiante($curEstudiante);
					//Vista::configurar();
					
						
				}else if ($accion=='preAgregarE')
					//Vista::mostrar("preAgregar");
					echo "entro a preagregarE";
				
				
			}catch(Exception $e){
				throw  $e;
				
			}		
		}
/*función que permite modificar un estudiante de un curso.
	 Obtiene la acción de la vista, si es modificarE llamará la función
	 modificarEstudiante(objeto tipo curso estudiante)
	 del servicio de curso y le pasará un objeto tipo curEstudiante con 
	 la información de la vista, si la acción es preAgregarE abrirá
	 la vista de agregar un estudiante a un curso.  
		Parámetros de entrada:
			Ninguno.
		Valores de salida:
			Ninguno.
*/
		static function modificarEstudiante(){
			try{
				$accion=PostGet::obtenerPostGet('m_accion');
				$codCurso=PostGet::obtenerPostGet('codCurso');
				$codEstudiante=PostGet::obtenerPostGet('codEstudiante');
				if ($accion=='modificarE'){
					$curEstudiante=new CurEstudiante();
					$curEstudiante->asignarCodEstudiante($codEstudiante);
					$curEstudiante->asignarCodCurso($codCurso);
					$curEstudiante->asignarPorAsistencia(PostGet::obtenerPostGet('porAsistencia'));
					$curEstudiante->asignarNota(PostGet::obtenerPostGet('nota'));
					$curEstudiante->asignarEstado(PostGet::obtenerPostGet('estado'));
					$curEstudiante->asignarObservaciones(PostGet::obtenerPostGet('observaciones'));
					CursoServicio::modificarEstudiante($curEstudiante);
					//Vista::configurar();
					
						
				}else if ($accion=='preModificarE'){
					//Vista::mostrar("preAgregar");
					$r=CursoServicio::obtenerEstudiante($codEstudiante,$codCurso);
				}
				
			}catch (Exception $e){
				throw $e;
				
			}	
		}
		static function mostrarEstudiante(){
			try{
				$codCurso=PostGet::obtenerPostGet('codCurso');
				$r=CursoServicio::obtenerEstudiantes($codCurso);
				//Vista::mostar(listarE);
				
			}catch (Exception $e){
				throw $e;
			}
			
			
		}
		static function eliminarEstudiante(){
			try{
				$codCurso=PostGet::obtenerPostGet('codCurso');
				$codEstudiante=PostGet::obtenerPostGet('codEstudiante');
				CursoServicio::eliminarEstudiante($codCurso,$codEstudiante);
				
				
			}catch(Exception $e){
				echo $e;
				
			}
		}
		static function listarCursosPorDocente(){
			try{
				var_dump($codDocente=PostGet::obtenerPostGet('codDocente'));
				var_dump($codPeriodo=PostGet::obtenerPostGet('codPeriodo'));
				var_dump($r=CursoServicio::obtenerCursosPorDocente($codDocente,$codPeriodo));
				//Vista::mostrar(listaDocente);
			}catch(Exception $e){
				echo $e;	
			}
			
			
		}
	
}
